www.gusucode.com > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图 > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图/vblast-ofdm simulation/rx_convert_to_freq_vblast.m

    function [freq_tr_syms, freq_data_syms] = rx_convert_to_freq_vblast(time_signal, SimulationParameters)

global SimulationConstants;

M=SimulationParameters.M;
[n_tx_antennas, n_rx_antennas] = get_n_antennas(SimulationParameters);

fft_length=SimulationParameters.FFTPoints;

%long training symbols
for rx_ant = 1:n_rx_antennas
      long_tr_syms = [time_signal(rx_ant,1:fft_length) time_signal(rx_ant,fft_length+17:2*fft_length+16)];
      long_tr_syms = reshape(long_tr_syms, fft_length, 2);

   
   % to frequency domain
   freq_long_tr = fft(long_tr_syms)/sqrt(n_tx_antennas);
   reorder = [(fft_length/2)+1:fft_length 1:(fft_length/2)];
   freq_long_tr(reorder,:) = freq_long_tr;
   
   % Select training carriers
   freq_tr_syms = freq_long_tr;
      
   %if there is a zeropad option   
   if SimulationParameters.ZeroPad==1
      num_data_carriers=SimulationConstants.NumDataSubc;
      x=fft_length-num_data_carriers;
      freq_tr_syms=freq_tr_syms([x/2:x/2+num_data_carriers/2-1 ((x/2+num_data_carriers/2)+1):fft_length-(fft_length-num_data_carriers)/2],:);
   end


   data_syms = time_signal(rx_ant, (2*fft_length)+1:length(time_signal));
   data_sig_len = length(data_syms);
   n_data_syms = floor(data_sig_len/(fft_length+16));
   
   % Cut to multiple of symbol period
   data_syms = data_syms(1:n_data_syms*(fft_length+16));
   data_syms = reshape(data_syms, (fft_length+16), n_data_syms);
   % remove guard intervals
   data_syms(1:16,:) = [];
   
   % perform fft
   freq_data = fft(data_syms)/sqrt(n_tx_antennas);
   
   %Reorder pattern is [33:fft_length 1:32]
   freq_data(reorder,:) = freq_data;
   
   %Select data carriers
   freq_data_syms = freq_data;
   
   %if there is a zeropad option   
   if SimulationParameters.ZeroPad==1
       num_data_carriers=SimulationConstants.NumDataSubc;
       x=fft_length-num_data_carriers;
       freq_data=freq_data([x/2:x/2+num_data_carriers/2-1 ((x/2+num_data_carriers/2)+1):fft_length-(fft_length-num_data_carriers)/2],:);
   end

   tmp_freq_tr(rx_ant,:,:) = freq_tr_syms;
   tmp_data_syms(rx_ant,:,:) = freq_data;
end
freq_tr_syms = tmp_freq_tr;
freq_data_syms = tmp_data_syms;